﻿//#include<iostream>
//
//using namespace std;

//int main()
//{
//	int a = 10;
//
//	int& b = a;
//	int& c = b;
//	int& d = c;
//
//	d++;
//
//	cout << a << " " << b << " " << c << " " << d << " " << endl;
//
//	return 0;
//}

//void Swap(int& x, int& y)
//{
//	int tmp = x;
//	x = y;
//	y = tmp;
//}
//
//void Swap(int* x, int* y)
//{
//	int tmp = *x;
//	*x = *y;
//	*y = tmp;
//}
//
//int main()
//{
//	int x = 10, y = 20;
//
//	Swap(x, y);
//
//	cout << x << " " << y << endl;
//
//	//Swap(&x, &y);
//
//	//cout << x << " " << y << endl;
//
//	return 0;
//}

//int main()
//{
//	int a = 10;
//
//	int c = 20;
//
//	int& b = a;	//取a的引用b
//
//	b = c;	//这里不是让b引用c，而是一个赋值
//
//	cout << &a << endl;
//	cout << &b << endl;
//	cout << &c << endl;
//	cout << a << endl;
//	cout << b << endl;
//	cout << c << endl;
//}

//void func(int& val)
//{
//	int a = val;
//	a++;
//	cout << val << endl;
//}
//
//int main()
//{
//	int a = 10;
//	const int b = a * 3;
//	const int& c = a;
//	double d = 3.14;
//
//	func(a);
//	func(b);
//	func(40);
//	func(a + b);
//	func(c);
//	func(d);
//
//	return 0;
//}

// 实现⼀个ADD宏函数的常见问题
//#define ADD(int a, int b) return a + b;
//#define ADD(a, b) a + b;
//#define ADD(a, b) (a + b)

// 正确的宏实现（要考虑展开后和运算符优先级的问题）
//#define Add(a, b) ((a) + (b))
// 为什么不能加分号?
// 为什么要加外面的括号?
// 为什么要加里面的括号?

#include"Add.h"

int main()
{
	//error LNK2019: 无法解析的外部符号 "void __cdecl Add(int,int)" (?Add@@YAXHH@Z)，函数 main 中引用了该符号
	Add(1, 2);

	return 0;
}
